package Archivo;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;

import Modelo.Modelo;
import beans.Cliente;
import beans.ItemLista;
import beans.ItemOrdenCompra_inicial;
import beans.ItemSolCotizacion;
import beans.Lista;
import beans.Orden_Compra_inicial;
import beans.Proveedor;
import beans.Rodamiento;
import beans.SolicitudCotizacion;

public class ManejadorArchivos {
	private static ManejadorArchivos instancia;
	public ManejadorArchivos(){}

	public static ManejadorArchivos obtenerInstancia(){
		if(instancia==null)
			instancia = new ManejadorArchivos();
		return instancia;
	}

	@SuppressWarnings({ "unchecked", "rawtypes" })
	public void importar(File archivo) throws FileNotFoundException, IOException, JDOMException {		
		Rodamiento rodaaux=new Rodamiento();
		List<ItemLista> items= new ArrayList();
		SAXBuilder builder = new SAXBuilder();  
 		Document doc = builder.build(archivo /*new FileInputStream("c:\\lista.xml")*/ ); 
	    Element raiz = doc.getRootElement();  
	    //imprimirDocumento (doc);
	    Lista lista=new Lista(); 
		lista.setListaOferta(Boolean.parseBoolean(raiz.getAttributeValue("oferta")));
		lista.setDescripcion(raiz.getAttributeValue("nombre"));
		lista.setActiva(true);
		String nombreProveedor = raiz.getAttributeValue("proveedor");
		Proveedor provaux=new Proveedor();
		provaux.setRazonSocial(nombreProveedor);
		Proveedor pro=Modelo.obtenerInstancia().obtenerProveedor(provaux);
		if(pro==null){
			System.out.println("proveedor no encontrado");
		}else{
			//pro.setCondicionesDeCompra(raiz.getAttributeValue("condicioncompra"));
			//pro.setNombre(raiz.getAttributeValue("nombreProveedor"));
			lista.setProveedor(pro);
			lista.setFecha(new Date());
			
			List<Element> hijosRaiz = raiz.getChildren("item");  
			//System.out.println("condicion: " + hijosRaiz.get(0).getChild("condicion").getText());
		    
		    for(Element hijo: hijosRaiz){  
	
		    	ItemLista item=new ItemLista();
		    	item.setCondicionDescuento(hijo.getChildText("condicion"));
		    	item.setPrecio(Double.parseDouble(hijo.getChildText("precio")));
		    	Integer stock=null;
		    	try{
		    		stock = Integer.parseInt(hijo.getChildText("stock"));
		    	} catch (NumberFormatException e){
		    		//stock = -1;
		    	}
		    	item.setStock(stock);
		    	
		    	String codigo = hijo.getChildText("codigo");
		    	String descripcion = hijo.getChildText("descripcion");
		    	String marca = hijo.getChildText("marca");
		    	String origen = hijo.getChildText("origen");
		    	rodaaux.setCodigo(codigo);
		    	rodaaux.setDescripcion(descripcion);
		    	rodaaux.setMarca(marca);
		    	rodaaux.setOrigen(origen);
		    	
		    	Rodamiento roda=Modelo.obtenerInstancia().obtenerRodamiento(rodaaux);
		    	
		    	//Si no lo encuentra, lo crea
		    	if(roda==null){
		    		roda=new Rodamiento();
		    		roda.setCodigo(codigo);
		    		roda.setDescripcion(descripcion);
		    		roda.setMarca(marca);
		    		roda.setOrigen(origen);
		    		Modelo.obtenerInstancia().guardarRodamiento(roda);
		    	}
		    	item.setRodamiento(roda);     
		    	items.add(item);		     
		    }  
		    
			lista.setItems(items);
		    
		    Modelo.obtenerInstancia().guardarListaProveedor(lista);
		}
	}
	
	@SuppressWarnings({ "unchecked"})
	public void importarOC(File archivo) throws FileNotFoundException, IOException, JDOMException {		
		Rodamiento rodaaux=new Rodamiento();
		SAXBuilder builder = new SAXBuilder();  
 		Document doc = builder.build(archivo /*new FileInputStream("c:\\lista.xml")*/ ); 
	    Element raiz = doc.getRootElement();  
	    //imprimirDocumento (doc);
	    Orden_Compra_inicial orden=new Orden_Compra_inicial(); 
			List<Element> hijosRaiz = raiz.getChildren("item");  
			//System.out.println("condicion: " + hijosRaiz.get(0).getChild("condicion").getText());
		    System.out.println("size:" + hijosRaiz.size());
		    for(Element hijo: hijosRaiz){  
	
		    	ItemOrdenCompra_inicial item=new ItemOrdenCompra_inicial();
				String nombreProveedor = hijo.getChildText("proveedor");
		    	
				item.setPrecio(Double.parseDouble(hijo.getChildText("precio")));
				String codigo = hijo.getChildText("codigo");
				
		    	item.setCantidad(Integer.parseInt(hijo.getChildText("cantidad")));
				Proveedor provaux=new Proveedor();
				provaux.setRazonSocial(nombreProveedor);
				
				provaux=Modelo.obtenerInstancia().obtenerProveedor(provaux);
		    	item.setProveedor(provaux);
		    	rodaaux.setCodigo(codigo);
		    	Rodamiento roda=Modelo.obtenerInstancia().obtenerRodamiento(rodaaux);
		    	item.setRodamiento(roda);   	
		    	orden.AgregarItem(item);	     
		    }  
		    Modelo.obtenerInstancia().crearOrdenesCompra(orden);
		    // Crear el XML  de las OC
		    Modelo.obtenerInstancia().crearXMLoc(orden);
		    
		}
	
	
    public static void imprimirDocumento(Document miDocumento) {
        try {
            XMLOutputter outputter = new XMLOutputter();
            outputter.output(miDocumento, System.out);
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }
    }
    
    
    @SuppressWarnings({ "unchecked"})
	public void importarSolCot(File archivo) throws FileNotFoundException, IOException, JDOMException {		
		Rodamiento rodaaux=new Rodamiento();
		SAXBuilder builder = new SAXBuilder();  
 		Document doc = builder.build(archivo); 
	    Element raiz = doc.getRootElement();  
	    //imprimirDocumento (doc);
	    SolicitudCotizacion orden=new SolicitudCotizacion(); 
			List<Element> hijosRaiz = raiz.getChildren("item");  
			//System.out.println("condicion: " + hijosRaiz.get(0).getChild("condicion").getText());
		    System.out.println("size:" + hijosRaiz.size());
		    for(Element hijo: hijosRaiz){  
	
		    	ItemSolCotizacion item=new ItemSolCotizacion();
				String codCliente = hijo.getChildText("cliente");
		    	
				//item.setPrecio(Double.parseDouble(hijo.getChildText("precio")));
				String codigo = hijo.getChildText("codigo");
				
		    	item.setCantidad(Integer.parseInt(hijo.getChildText("cantidad")));
				Cliente cliente=new Cliente();
				cliente.setRazonSocial(codCliente);
				
				cliente =Modelo.obtenerInstancia().obtenerCliente(codCliente);
		    	item.setCliente(cliente);
		    	rodaaux.setCodigo(codigo);
		    	Rodamiento roda=Modelo.obtenerInstancia().obtenerRodamiento(rodaaux);
		    	item.setRodamiento(roda); 
		    	Proveedor proveedor = new Proveedor();
		    	proveedor.setRazonSocial("razon1");
		    	Proveedor proveedor2 = Modelo.obtenerInstancia().obtenerProveedor(proveedor);
		    	item.setProveedor(proveedor2);
		    	item.setPrecio(200);
		    	orden.AgregarItem(item);	     
		    }  
		
		    // Crear el XML  de las Sol Cot
		    
		    Modelo.obtenerInstancia().crearXMLSolCot(orden);
		    
		}
	
    /*
	public void exportar(OrdenCompraProv orden) throws IOException {		 
	    Element root=new Element("ordencompra");
	    
	    Element nombre=new Element("nombre");
	    nombre.addContent(""+orden.getProveedor().getRazonSocial());
	    
	    Element cant=new Element("cantidad");
	    cant.addContent(""+orden.getCantidad());
	    
	    Element precio=new Element("precio");
	    precio.addContent(""+orden.getPrecio());
	    
	    Element carac=new Element("descripcion");
	    carac.addContent(""+orden.getRodamiento().getDescripcion());
	    
	    Element codigo=new Element("codigo");
	    codigo.addContent(""+orden.getRodamiento().getCodigo());
	    
	    Element marca=new Element("marca");
	    marca.addContent(""+orden.getRodamiento().getMarca());
	    
	    Element pais=new Element("origen");
	    pais.addContent(""+orden.getRodamiento().getOrigen());
	    

	    root.addContent(nombre);
	    root.addContent(cant);
	    root.addContent(precio);
	    root.addContent(carac);
	    root.addContent(codigo);
	    root.addContent(marca);
	    root.addContent(pais);

	    
	    Document doc=new Document(root);
	   
	    
	   
	    XMLOutputter out=new XMLOutputter();
	    Date d = new Date();
	    FileOutputStream file=new FileOutputStream("C:\\"+orden.getProveedor().getRazonSocial()+orden.getRodamiento().getCodigo()+orden.getRodamiento().getDescripcion()+orden.getRodamiento().getMarca()+orden.getRodamiento().getOrigen()+d.getDate()+""+d.getMonth()+1+""+d.getYear()+1900+""+d.getHours()+""+d.getMinutes()+".xml");
	    out.output(doc,file);
	    file.flush();
	    file.close();
	 }	
	 */
	
}
